package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.ItemCatMapper;
import com.jt.pojo.ItemCat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class ItemCatServiceIml implements ItemCatService{
    long startTime= System.currentTimeMillis();

    @Autowired
    private  ItemCatMapper itemCatMapper;

    /*Map集合封装
    * ,map集合中只有父子关系,没有嵌套关系没有 一级二级三级关系.
    * 优点,只查询一次数据库.就能得到所有的数据,只存在父子关系.
    * */
    public Map<Integer, List<ItemCat>> findItemCatList() {
        Map<Integer, List<ItemCat>> map= new HashMap<>();
        List<ItemCat>  itemCatList =itemCatMapper.selectList(null);
        /*实现数据封装
        * 两个条件; 1,key不存在,准备一个新的List集合,将自己当作第一个元素追加
        *         2,key存在,获取原有List集合,将注解追加
        * */
        for(ItemCat  itemCat:itemCatList){
            int key =itemCat.getParentId();
            if (map.containsKey(key)){/*判断是否包含Api*/
                List <ItemCat> list=map.get(key);
                list.add(itemCat);

            }else {
                /*如果key不存在,就将自己当做第一个元素存入, 用list集合来装*/
                List<ItemCat> list=new ArrayList<>();
                list.add(itemCat);
                map.put(key,list);
            }
        }
        return map;
    }


    /*List集合,多次查询数据库封装*/
    @Override
    public List<ItemCat> findItemCatList(Integer level) {
        long start=System.currentTimeMillis();
        Map<Integer, List<ItemCat>> map=findItemCatList();
        if (level==1){
            return map.get(0);
        }
        if (level==2){
            return getLevel2list(map);
        }
        List<ItemCat>treeList =getLevel3List(map);
        long Times=System.currentTimeMillis();
        System.out.println("时间"+(Times-start));
        return treeList;
    }


    public List<ItemCat>  getLevel2list(Map<Integer, List<ItemCat>> map){
        List <ItemCat> oneList= map.get(0);
        for(ItemCat oneItemCat: oneList){
            List<ItemCat> twoList=map.get(oneItemCat.getId());
            oneItemCat.setChildren(twoList);
        }
        return oneList;
    }

    public  List<ItemCat> getLevel3List(Map<Integer, List<ItemCat>> map){
       List<ItemCat> oneList= getLevel2list(map);
       for (ItemCat oneItemCat: oneList){
          List<ItemCat>twoList= oneItemCat.getChildren();
          if (twoList==null || twoList.size()==0){
              continue;
          }
          for ( ItemCat twoItemCat:twoList){
              List<ItemCat> treeList=map.get(twoItemCat.getId());
              twoItemCat.setChildren(treeList);
          }
       }
       return oneList;
    }










    /**/
//    @Override
//    public List<ItemCat> findItemCatList(Integer level) {
//        /*查询一级*/
//        QueryWrapper <ItemCat>queryWrapper=new QueryWrapper<>();
//        queryWrapper.eq("parent_id",0  );
//        List <ItemCat> oneList= itemCatMapper.selectList(queryWrapper);
//
//        for (ItemCat oneItemCat : oneList){
//            queryWrapper.clear();
//            queryWrapper.eq("parent_id", oneItemCat.getId());
//            List<ItemCat> twoList=itemCatMapper.selectList(queryWrapper);
//            oneItemCat.setChildren(twoList);
//
//            for (ItemCat twoItemCat : twoList){
//                queryWrapper.clear();
//                queryWrapper.eq("parent_id", twoItemCat.getId());
//                List<ItemCat> threeList=itemCatMapper.selectList(queryWrapper);
//                twoItemCat.setChildren(threeList);
//            }
//        }
//        long  endTime= System.currentTimeMillis();
//        System.out.println("查询耗时"+(endTime-startTime));
//        return oneList;
//    }

   /*更新*/
    @Override
    public void updateItem(ItemCat itemCat) {
        itemCatMapper.updateById(itemCat);
    }

    /*新增*/
    @Override
    public void saveItemCat(ItemCat itemCat) {
        itemCat.setStatus(true);
        itemCatMapper.insert(itemCat);
    }

    @Override
    public void deleteItemCat(Integer id,Integer level) {
        if (level==3){
            itemCatMapper.deleteById(id);
        }
        if (level==2){
            /*查询3级菜单数据*/
            QueryWrapper queryWrapper=new QueryWrapper();
            queryWrapper.eq("parent_id", id);
             itemCatMapper.delete(queryWrapper);
             itemCatMapper.deleteById(id);
         /*先删除3级菜单
         * 再删除2级菜单
         * */
        }
        if (level==1){
            /*查询3级菜单数据*/
            List <Integer> ids=new ArrayList<>();
            QueryWrapper queryWrapper=new QueryWrapper();
            queryWrapper.eq("parent_id", id);
            List <ItemCat> twoList=itemCatMapper.selectList(queryWrapper);
            for (ItemCat twoItemCat: twoList){
                queryWrapper.clear();
                queryWrapper.eq("parent_id", twoItemCat.getId());
                itemCatMapper.delete(queryWrapper);
                ids.add(twoItemCat.getId());
            }
            ids.add(id);
            itemCatMapper.deleteBatchIds(ids);
        }
     }
    /*修改*/
}
